Mainframe relational database products are typically very large and complex software packages that provide the ability to manage and execute hundreds/thousands of requests per minute for thousands of concurrent users.
Many database environments provide a facility to compress data structure before storing them on a physical DASD (Direct Access Storage Device) device. The upside to data compression is that the number of bytes stored on the DASD device is diminished. For products that use data block to data buffer management facilities (for example, a database), typically more data rows can be retrieved in compressed form into a given data buffer. The downside to data compression is the extra software instructions (i.e., CPU overhead) required to compress data rows and then decompress the data rows.
As the size of the data block (and therefore the data buffer) is increased, the processing time for randomly retrieving a selected data row from a given data buffer also increases. For non-compressed rows, a selected data block may be retrieved into the data buffer and a binary search may be performed on the data block for a given row with minimal processing because the row number within the block and the row size is known to the database (based on index entries, for example). For compressed data rows, on the other hand, the row length stored on DASD and retrieved to the data buffer may vary according to the amount of compression achieved. Due to this variation, a binary search for the data row cannot be performed. A sequential-skip processing may be performed. For example, to find a data row with row id 5 in a compressed data block, a processor may start the search at the beginning of the data block, obtain a compressed length of a data row with row id 1, skip that amount to the beginning of the next data row (for example, data row with row id 2), obtain the compressed length of the next data row, and repeat the skip processing until the data row with row id 5 is reached. At that point, the data row with row id 5 may be decompressed.
With increased data block/data buffer sizes, the ability to store more compressed data rows per block increases. The increased number of data rows per block increases the sequential-skip processing needed to locate rows at the end of the larger data blocks.
These and other drawbacks exist.